/**
 * 创建一个防抖函数，用于限制函数的执行频率
 * 防抖函数会在一系列快速调用后，仅执行一次目标函数
 * 这对于限制高频率事件（如窗口的resize或scroll事件）非常有用
 *
 * @param func 目标函数，即需要延时执行的函数
 * @param delay 延迟的时间间隔，单位为毫秒，默认为1000毫秒（1秒）
 * @returns 返回一个防抖函数，该函数将在指定的延迟时间结束后执行目标函数
 */
const debounce = function (func, delay = 1000) {
  let timer;
  return function (...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
};

/**
 * 节流函数，用于限制函数的执行频率
 * @param func 需要节流的函数
 * @param delay 延迟时间，默认为1500毫秒
 * @returns 返回一个节流后的函数
 */
const throttle = function (func, delay = 1500) {
  let flag = true; // 是否可执行
  return function (...args) {
    if (!flag) return;
    func.apply(this, args);
    flag = false;
    setTimeout(() => {
      flag = true;
    }, delay);
  };
};

console.log("开始");

// // debounce测试
// let timer;
// timer = setInterval(debounce(() => {
//   console.log("debounce");
// }), 100);
// setTimeout(() => {
//   clearInterval(timer);
// }, 1000);

// throttle测试
let timer2;
timer2 = setInterval(throttle(() => {
  console.log("debounce");
}), 100);
